function WebGLAnimation() {

  let context = null;
  let isAnimating = false;
  let animationLoop = null;
  let requestId = null;

  function onAnimationFrame(time, frame) {

    animationLoop(time, frame);

    requestId = context.requestAnimationFrame(onAnimationFrame);

  }

  return {

    start: function () {

      if (isAnimating === true) return;
      if (animationLoop === null) return;

      requestId = context.requestAnimationFrame(onAnimationFrame);

      isAnimating = true;

    },

    stop: function () {

      context.cancelAnimationFrame(requestId);

      isAnimating = false;

    },

    setAnimationLoop: function (callback) {

      animationLoop = callback;

    },

    setContext: function (value) {

      context = value;

    }

  };

}

export {WebGLAnimation};
